home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / serien / purity / nr.17 / pcq-programme / game / game.i < prev    next >
Text File  |  1995-04-22  |  8KB  |  241 lines

  1.  
  2.  
  3. {
  4.     Game.i
  5.  
  6.       Die hier folgenden Routinen sind alle für die Benutzung
  7.       in den Spielen gedacht.
  8.       Nähere Informationen: siehe Dokumentation.
  9. }
  10.  
  11. { - Copyright und Revisionsnummer für die verwendeten Routinen -------- }
  12.  
  13. CONST
  14.     CopyRight : string = "7. Juni 1993 , Jörg Wach ";
  15.     RevNummer : string = "Version V1.20";
  16.  
  17. {$I "include:Exec/libraries.i"  }
  18. {$I "include:exec/interrupts.i"  }  { für Permit/Forbid und VB-Server }
  19. {$I "Include:Exec/Memory.i"}        { * für den VB-Server * }
  20. {$I "Include:Exec/nodes.i"}         { * Für den VB-Server * }
  21.  
  22. {$I "include:intuition/intuition.i"}
  23.  
  24. {$I "include:graphics/Pens.i"      }
  25. {$I "include:graphics/Text.i"      }
  26. {$I "include:graphics/Graphics.i"  }
  27. {$I "include:graphics/rastport.i"  } { für den Rastport }
  28. {$I "include:graphics/blitter.i"  }  { für die Blitter-Funktionen }
  29.  
  30. {$I "Include:Hardware/intbits.i"} { Für den VBServer. }
  31. {$I "Include:Libraries/DOS.i"}      { * Für die Sample-Routinen. * }
  32. {$I "Include:Utils/StringLib.i"}    { * Für die Sample-Routinen. * }
  33.  
  34.  
  35. { - Die verwendeten Typen, Constanten und Variablen. ------------------ }
  36.  
  37.  
  38. TYPE
  39.         ObjektDef = record  { die Definition meiner Spielobjekte }
  40.             Ox      :   short;  { x-Position linke obere Ecke }
  41.             Oy      :   short;  { y-Position linke obere Ecke }
  42.             Sizex   :   short;  { x-size }
  43.             Sizey   :   short;  { y-size }
  44.             Speedx  :   short;  { x-Geschwindigkeit }
  45.             Speedy  :   short;  { y-Geschwindigkeit }
  46.             Phase1  :   short;  { Bewegungsphasenzähler1 }
  47.             Phase2  :   short;  { Bewegungsphasenzähler2 }
  48.             typ     :   short;  { Objekttyp }
  49.         end;
  50.  
  51. CONST
  52.         Objektsize : integer = sizeof(ObjektDef); { Größe eines Objektes }
  53.  
  54. VAR
  55.         Objekt     : array[0..255] of ObjektDef;  { Max. Anzahl der Objekte }
  56.         Picture    : array[1..100] of Imageptr;  { Max. 100 Bilder. Daten
  57.                                                   nur als Pointer ( um
  58.                                                   schneller Bilder
  59.                                                   zuzuordnen) }
  60.  
  61.         blitctrl        : short;    { Globale Variable für Blitterergebnis }
  62.         BlittiSpeicher  : Address;  { Wird benötigt, weil überschneidungen
  63.                                       bei der Bearbeitung auftreten !!! }
  64.         MyBitMap        : Address;  { Adresse der BitMap }
  65.         MyRPort         : RastPortPtr;
  66. { --------------------------------------------------------------------- }
  67. { - Die verwendeten Typen, Variablen und Konstanten für den VB-Server - }
  68. { --------------------------------------------------------------------- }
  69.  
  70.         vbint : InterruptPtr;
  71.         VBcounter : integer;
  72.  
  73. { --------------------------------------------------------------------- }
  74. { - Die verwendeten Typen, Konstanten und Variablen für die Playsample  }
  75. { - Routinen. --------------------------------------------------------- }
  76. { --------------------------------------------------------------------- }
  77. type
  78.     Voice8Header = record
  79.         oneShotHiSamples,
  80.         repeatHiSamples,
  81.         samplesPreHiCycle : Integer;
  82.         samplesPerSec : Short;
  83.         ctOctave        : Byte;
  84.         sCompression    : Byte;
  85.         volume : Integer;
  86.     end;
  87.  
  88.     Sampletabdef = record
  89.         dbuf    : Address;      { * Enthält die Adresse des Samplebuffers. * }
  90.         dlen    : integer;      { * Länge des Samples. * }
  91.         dhz     : short;        { * Tonhöhe. * }
  92.     end;
  93.  
  94.     FibTable = Array [0..15] of Byte;
  95.  
  96. const
  97.     FP          : FileHandle = Nil;
  98.     codeToDelta : FibTable = (-34, -21, -13, -8, -5, -3, -2, -1, 0,
  99.                                 1, 2, 3, 5, 8, 13, 21);
  100.     Sampletab   : array[1..10] of Sampletabdef = (
  101.                   ( Nil, 0, 0),
  102.                   ( Nil, 0, 0),
  103.                   ( Nil, 0, 0),
  104.                   ( Nil, 0, 0),
  105.                   ( Nil, 0, 0),
  106.                   ( Nil, 0, 0),
  107.                   ( Nil, 0, 0),
  108.                   ( Nil, 0, 0),
  109.                   ( Nil, 0, 0),
  110.                   ( Nil, 0, 0)                    );
  111.  
  112.     Sampletabsize : integer = sizeof(Sampletabdef);
  113.     Channel : byte = 0;     { * Enthält die Nummer des neu zu belegenden
  114.                                 Kanals. * }
  115. var
  116.     VHeader     : Voice8Header;
  117.  
  118. { --------------------------------------------------------------------- }
  119.  
  120.  
  121. Procedure GraphCollision( x1, y1, xsize, ysize : short);
  122. { Testet einen BitMapBereich auf vorhandene Punkte. xsize und ysize
  123.   bestimmen das Ausmaß des zu testenden Bereiches. }
  124.     External;
  125.  
  126. Function CollObjekt(von, bis, x1, y1, sizex, sizey : short) : short;
  127. { Die Funktion ermittelt, welches Objekt in dem Rechteck x1, y1,
  128.   x1+sizex und y1+sizey Kollidiert ist. Hierbei kann ein von / bis
  129.   Bereich für die Objektuntersuchung angegeben werden (0 - 255 ).
  130.   Wird als Von-Wert -1 angegeben, so werden alle Objekte untersucht und
  131.   die erste Objektnummer, die zur Kollision führte, zurück gegeben.
  132.   Ist der Rückgabewert -1, so gab es eine Kolision mit einem nicht
  133.   definierten Objekt bzw. das Objekt wurde nicht gefunden.
  134. }
  135.     External;
  136.  
  137. Procedure DrawObjekt( VonNr, BisNr : short );
  138. {   Zeichnet die mit VonNr bis BisNr gekennzeichnete Objekte. }
  139.     External;
  140.  
  141. Procedure UnDrawObjekt( VonNr, BisNr : short );
  142. {   Löscht die mit VonNr bis BisNr gekennzeichnete Objekte. }
  143.     External;
  144.  
  145. Function GetChar() : byte;
  146. { Liefert den RAW-Wert einer Taste zurück.
  147.   Ein paar Tastencodes:     AMIGA-links   : $33
  148.                             AMIGA-rechts  : $31
  149.                             DEL           : $73
  150.                             Cursor hoch   : 103
  151.                             Cursor runter : 101
  152.                             Cursor rechts :  99
  153.                             Cursor links  :  97
  154. }
  155.     External;
  156.  
  157. Function GetJoy2(): byte;
  158. { Gibt folgende Werte zurück:
  159.     0 - Joystick wurde nicht berührt
  160.     1 - Joystick nach rechts
  161.     2 - Joystick nach links
  162.     4 - Joystick nach hinten
  163.     8 - Joystick nach vorne
  164.    16 - Feuertaste gedrückt
  165. }
  166.     External;
  167.  
  168. Function ChipCopy( Source : Address; Size : integer) : Address;
  169. { Allokiert ChipMem in der Größe Size und kopiert die Daten von
  170.   der Addresse Source dort hinein. Zurückgegeben wird die ChipMem
  171.   Adresse.
  172. }
  173.     External;
  174.  
  175. Procedure IntToStr6(s : string; i : integer);
  176. { Konvertiert positive Zahlen in das Stringformat mit führenden
  177.     Nullen. Max. 6 Nullen und max. die Zahl 999999 }
  178.  
  179.     External;
  180.  
  181. Procedure PowerLEDON();
  182. { Macht die PowerLed an. }
  183.     External;
  184.  
  185. Procedure PowerLEDOFF();
  186. { Macht die PowerLed aus. }
  187.     External;
  188.  
  189. { --------------------------------------------------------------------- }
  190. { ---------   VB-Server                    ---------------------------- }
  191. { --------------------------------------------------------------------- }
  192.  
  193. Procedure InitVB();
  194. { * Initialisiert den VB-Server. * }
  195.     External;
  196.  
  197. Procedure Exitvb();
  198. { * Gibt den VB-Server wieder frei. * }
  199.     External;
  200.  
  201. Procedure Settime();
  202. { * Setzt den VB-Server-Wert uf 0. * }
  203.     External;
  204.  
  205. Function Gettime(): integer;
  206. { * Liefert den Wert des VBServer zurück. * }
  207.     External;
  208.  
  209. Procedure WaitVB(ticks : short);
  210. { * Wartet ticks Ticks vom VB. * }
  211.     External;
  212.  
  213. { --------------------------------------------------------------------- }
  214. { ---------   Playsample                   ---------------------------- }
  215. { --------------------------------------------------------------------- }
  216.  
  217. Procedure FreeSample(Nummer: byte);
  218. { * Gibt das Sample mit der Nummer nummer aus der Sampletab wieder
  219.     frei inkl. aller belegter Speicherbereiche. * }
  220.     External;
  221.  
  222. Procedure PlaySample(nummer : short);
  223. { * Spielt den in der Sampletab abgelegten Sound ab. * }
  224.     External;
  225.  
  226. Function LoadSample(Nummer : byte; name : String): short;
  227. { Lädt ein IFF-8SVX Sample und weißt diesem alle erforderlichen Werte
  228.   zu.
  229.   Returncodes :  0 ---> Sample konnte O.K. initialisiert werden.
  230.                 -1 ---> File konnte nicht geöffnet werden.
  231.                 -2 ---> Kein Filename.
  232.                 -3 ---> Sampleplatz schon belegt.
  233.                 -4 ---> Kein IFF-8SVX-File.
  234.                 -7 ---> Kein Speicher für Sample.
  235.                 -9 ---> Kein Speicher für Dekompression.
  236.                -10 ---> Unbekannter Kompression-Type.
  237. }
  238.     External;
  239.  
  240.  
  241.